--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
LXST/Codecs/Codec.py 0.4.8 (525314cf) Text, 2.09 KB
T8b949e# Copyright 2024-2026, Mark Qvist
Tff7b72import T7ee787numpy Tff7b72as T7ee787np
Tff7b72from T7ee787.T7ee787libsT7ee787.T7ee787pydub Tff7b72import Te6edf3AudioSegment
Te6edf3TYPE_MAP_FACTOR Tff7b72= Te6edf3npTff7b72.Td2a8ffiinfoTb4b4b4(Ta5d6ff"Ta5d6ffint16Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffmax
Tff7b72class T56d364CodecTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3preferred_samplerate Tff7b72= Tff7b72None
Te6edf3frame_quanta_ms Tff7b72= Tff7b72None
Te6edf3frame_max_ms Tff7b72= Tff7b72None
Te6edf3valid_frame_ms Tff7b72= Tff7b72None
Te6edf3source Tff7b72= Tff7b72None
Te6edf3sink Tff7b72= Tff7b72None
Tff7b72class T56d364CodecErrorTb4b4b4(Tf85149ExceptionTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72class T56d364NullTb4b4b4(Te6edf3CodecTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffencodeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3frameTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3frame
Tff7b72def Td2a8ffdecodeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3frameTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3frame
Tff7b72def Td2a8ffresample_bytesTb4b4b4(Te6edf3sample_bytesTb4b4b4, Te6edf3bitdepthTb4b4b4, Te6edf3channelsTb4b4b4, Te6edf3input_rateTb4b4b4, Te6edf3output_rateTb4b4b4, Te6edf3normalizeTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3sample_width Tff7b72= Te6edf3bitdepthTff7b72/Tff7b72/T79c0ff8
Te6edf3audio Tff7b72= Te6edf3AudioSegmentTb4b4b4(
Te6edf3sample_bytesTb4b4b4,
Te6edf3frame_rateTff7b72=Te6edf3input_rateTb4b4b4,
Te6edf3sample_widthTff7b72=Te6edf3sample_widthTb4b4b4,
Te6edf3channelsTff7b72=Te6edf3channelsTb4b4b4)
Tff7b72if Te6edf3normalizeTb4b4b4:
Te6edf3audio Tff7b72= Te6edf3audioTff7b72.Td2a8ffapply_gainTb4b4b4(Tff7b72-Te6edf3audioTff7b72.Td2a8ffmax_dBFSTb4b4b4)
Te6edf3resampled_audio Tff7b72= Te6edf3audioTff7b72.Td2a8ffset_frame_rateTb4b4b4(Te6edf3output_rateTb4b4b4)
Te6edf3resampled_bytes Tff7b72= Te6edf3resampled_audioTff7b72.Td2a8ffget_array_of_samplesTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fftobytesTb4b4b4(Tb4b4b4)
T8b949e# rate_factor = input_rate/output_rate
T8b949e# input_samples = int(len(sample_bytes)/channels/sample_width)
T8b949e# output_samples = int(len(resampled_bytes)/channels/sample_width)
T8b949e# target_samples = int(input_samples/rate_factor)
T8b949e# if output_samples < target_samples:
T8b949e# print("Mismatch")
T8b949e# add_samples = int(target_samples-output_samples)
T8b949e# fill = resampled_bytes[-sample_width:]*add_samples
T8b949e# resampled_bytes += fill
Tff7b72return Te6edf3resampled_bytes
Tff7b72def Td2a8ffresampleTb4b4b4(Te6edf3input_samplesTb4b4b4, Te6edf3bitdepthTb4b4b4, Te6edf3channelsTb4b4b4, Te6edf3input_rateTb4b4b4, Te6edf3output_rateTb4b4b4, Te6edf3normalizeTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3sample_width Tff7b72= Te6edf3bitdepthTff7b72/Tff7b72/T79c0ff8
Te6edf3input_samples Tff7b72= Te6edf3input_samplesTff7b72*Te6edf3TYPE_MAP_FACTOR
Te6edf3input_samples Tff7b72= Te6edf3input_samplesTff7b72.Td2a8ffastypeTb4b4b4(Te6edf3npTff7b72.Td2a8ffint16Tb4b4b4)
Te6edf3resampled_bytes Tff7b72= Te6edf3resample_bytesTb4b4b4(Te6edf3input_samplesTff7b72.Td2a8fftobytesTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3bitdepthTb4b4b4, Te6edf3channelsTb4b4b4, Te6edf3input_rateTb4b4b4, Te6edf3output_rateTb4b4b4, Te6edf3normalizeTb4b4b4)
Te6edf3output_samples Tff7b72= Te6edf3npTff7b72.Td2a8fffrombufferTb4b4b4(Te6edf3resampled_bytesTb4b4b4, Te6edf3dtypeTff7b72=Te6edf3npTff7b72.Td2a8ffint16Tb4b4b4)Tff7b72/Te6edf3TYPE_MAP_FACTOR
Te6edf3output_samples Tff7b72= Te6edf3output_samplesTff7b72.Td2a8ffreshapeTb4b4b4(Te6edf3output_samplesTff7b72.Td2a8ffshapeTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72/Tff7b72/Te6edf3channelsTb4b4b4, Te6edf3channelsTb4b4b4)
Te6edf3output_samples Tff7b72= Te6edf3output_samplesTff7b72.Td2a8ffastypeTb4b4b4(Te6edf3npTff7b72.Td2a8fffloat32Tb4b4b4)
Tff7b72return Te6edf3output_samples
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────